package cn.edu.fzu.delivery.http;

import java.io.IOException;
import java.util.Map;

import com.google.common.collect.ImmutableMap;
import org.springframework.lang.Nullable;

/**
 * http 客户端
 * 
 * <pre>
 * 
 *  1, 支持 get/post
 *  2, 注意, 以下场景会返回 <code>null</code>, 请调用方处理, 避免 NPE
 *      1) 当前线程被中断
 *      2) http status code 不是 2xx, 具体信息会以 error 级别输出到日志
 *  3, post 的 content-type
 *      1) string 类型的 content, 使用 application/json
 *      2) map 类型的 content, 由底层框架自动设置
 * </pre>
 */
public interface HttpClient {

    public static final Map<String, String> JSON_HEADER = ImmutableMap.of("Content-Type",
            "application/json; charset=utf-8");

    @Nullable
    String get(String url) throws IOException;


    @Nullable
    byte[] post(String url, String content) throws IOException;


    @Nullable
    byte[] post(String url, Map<String, String> headers, String content) throws IOException;


    @Nullable
    String post(String url, Map<String, String> parameters) throws IOException;


    void close();

}
